package javaBase.javaCollection.javaArray;

import java.util.Arrays;
import java.util.List;

public class Test {
	enum Week{Sum,Mon,Tue,Web,Thu,Fri,Sat}
	public static void main(String[] args) {

		String[] datas = new String[] { "1", "2", "3", "4", "5" };
		List list = Arrays.asList(datas);
		System.out.println(list.size());
		/*
		 * 先看 asList() 的源码
		 *  public static <T> List<T> asList(T... a) { 
		 *  return newArrayList<T>(a); 
		 *  } 
		 *  注意这个参数:T…a，这个参数是一个泛型的变长参数，我们知道基本数据类型是不可能泛型化的，也是就说
		 * 8 个基本数据类型是不可作为泛型参数的，但是为什么编译器没有报错呢？这是因为在 Java 中，数组会当做一个
		 * 对象来处理，它是可以泛型的，所以我们的程序是把一个 int 型的数组作为了 T 的类型，所以在转换之后 List 中 就只会存在一个类型为
		 * int 数组的元素了。所以我们这样的程序 System.out.println(datas.equals(list.ge
		 * t(0)));输出结果肯定是 true。当然如果将int改为 Integer，则长度就会变成 5 了。
		 */
		Week[] weeks = {Week.Sum,Week.Mon,Week.Tue,Week.Web,Week.Thu,Week.Fri};
		List<Week> list1 = Arrays.asList(weeks);
		list1.add(Week.Sat);
		//以上代码会爆错
		/*
		 * 这个内部类 ArrayList 并没有提高 add 的实现方法。在 ArrayList 中，它主要提供了如下几个方法：
		 * 1、size：元素数量 
		 * 2、toArray：转换为数组，实现了数组的浅拷贝。
		 * 3、get：获得指定元素。
		 * 4、contains：是否包含某元素。
		 * 所以综上所述，asList
		 * 返回的是一个长度不可变的列表。数组是多长，转换成的列表是多长，我们是无法通过 ad d、remove 来增加或者减少其长度的。
		 */
	}
}
